﻿using System;
using System.Collections.Generic;
using System.Windows.Forms;
using ComponentFactory.Krypton.Toolkit;
using PomodoroSuite.EntidadesNegocio;
using PomodoroSuite.EntidadesNegocio.Enumeradores;
using PomodoroSuite.FrontEnd.Win.Properties;
using PomodoroSuite.FW.DAL;

namespace PomodoroSuite.FrontEnd.Win
{
    public partial class frmEdicionTarea : KryptonForm
    {
        #region " Campos "

        private Tarea tareaEditada = null;

        #endregion

        #region " Constructor "

        public frmEdicionTarea()
        {
            InitializeComponent();
            CargarCombos();
        }

        public frmEdicionTarea(Tarea tarea)
        {
            InitializeComponent();
            tareaEditada = tarea;
            CargarCombos();
            CargarTarea();
        }

        #endregion

        #region " Eventos Formulario "

        private void frmEdicionTarea_Load(object sender, EventArgs e)
        {
            if (tareaEditada == null)
            {
                cmbEstado.SelectedIndex = 0;
                cmbPlanificacion.SelectedIndex = 0;
                cmbPrioridad.SelectedIndex = 0;
            }
        }

        private void btnCancelar_Click(object sender, EventArgs e)
        {
            Close();
        }

        private void btnGrabar_Click(object sender, EventArgs e)
        {
            if (string.IsNullOrEmpty(txtNombre.Text) || string.IsNullOrEmpty(txtDescripcion.Text))
            {
                MessageBox.Show(Resources.comun_DatosVacios, Resources.comun_Error, MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return;
            }

            try
            {
                if (tareaEditada == null)
                {
                    Tarea nuevaTarea = new Tarea()
                    {
                        IdUsuario = Program.UsuarioActivo.IdUsuario,
                        IdTareaSet = null,
                        Nombre = txtNombre.Text,
                        Descripcion = txtDescripcion.Text,
                        Tag = txtTag.Text,
                        FechaCreacion = DateTime.Now,
                        FechaInicio = (chkProgramar.Checked) ? (DateTime?)dtpInicio.Value.Date : null,
                        EstadoTarea = (Estado)(cmbEstado.SelectedItem as EntidadGenerica).Valor,
                        PrioridadTarea = (Prioridad)(cmbPrioridad.SelectedItem as EntidadGenerica).Valor,
                        PlanificacionTarea = (Planificacion)(cmbPlanificacion.SelectedItem as EntidadGenerica).Valor,
                        EstadoBD = PomodoroSuite.FW.Comun.EstadoEntidad.Nuevo,
                    };

                    FabricaDAL.ObtenerDal<Tarea>().Insertar(nuevaTarea);
                }
                else
                {
                    tareaEditada.Nombre = txtNombre.Text;
                    tareaEditada.Descripcion = txtDescripcion.Text;
                    tareaEditada.Tag = txtTag.Text;
                    tareaEditada.FechaInicio = (chkProgramar.Checked) ? (DateTime?)dtpInicio.Value.Date : null;
                    tareaEditada.EstadoTarea = (Estado)(cmbEstado.SelectedItem as EntidadGenerica).Valor;
                    tareaEditada.PrioridadTarea = (Prioridad)(cmbPrioridad.SelectedItem as EntidadGenerica).Valor;
                    tareaEditada.PlanificacionTarea = (Planificacion)(cmbPlanificacion.SelectedItem as EntidadGenerica).Valor;

                    FabricaDAL.ObtenerDal<Tarea>().Actualizar(tareaEditada);
                }
                MessageBox.Show(Resources.comun_GrabarCorrecto, Resources.comun_Informacion, MessageBoxButtons.OK, MessageBoxIcon.Information);
                Close();
            }
            catch (Exception exc)
            {
                MessageBox.Show(Resources.comun_GrabarError + "\n" + exc.Message, Resources.comun_Error, MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        #endregion

        #region " Métodos "

        private void CargarTarea()
        {
            txtNombre.Text = tareaEditada.Nombre;
            txtDescripcion.Text = tareaEditada.Descripcion;
            txtTag.Text = tareaEditada.Tag;
            if (tareaEditada.FechaInicio.HasValue)
            {
                chkProgramar.Checked = true;
                dtpInicio.Value = tareaEditada.FechaInicio.Value;
            }
            cmbEstado.SelectedValue = tareaEditada.EstadoTarea;
            cmbPlanificacion.SelectedValue = tareaEditada.PlanificacionTarea;
            cmbPrioridad.SelectedValue = tareaEditada.PrioridadTarea;
        }

        private void CargarCombos()
        {
            List<EntidadGenerica> lista = new List<EntidadGenerica>();
            lista.Add(new EntidadGenerica(Resources.prioridad_Alta, Prioridad.Alta));
            lista.Add(new EntidadGenerica(Resources.prioridad_Normal, Prioridad.Normal));
            lista.Add(new EntidadGenerica(Resources.prioridad_Baja, Prioridad.Baja));

            cmbPrioridad.DataSource = lista;

            lista = new List<EntidadGenerica>();
            lista.Add(new EntidadGenerica(Resources.planificacion_Planeado, Planificacion.Planeado));
            lista.Add(new EntidadGenerica(Resources.planificacion_NoPlaneado, Planificacion.NoPlaneado));

            cmbPlanificacion.DataSource = lista;

            lista = new List<EntidadGenerica>();
            lista.Add(new EntidadGenerica(Resources.estado_Planeado, Estado.Planeado));
            lista.Add(new EntidadGenerica(Resources.estado_EnProgreso, Estado.EnProgreso));
            lista.Add(new EntidadGenerica(Resources.estado_Terminado, Estado.Terminado));
            lista.Add(new EntidadGenerica(Resources.estado_Cancelado, Estado.Cancelado));

            cmbEstado.DataSource = lista;
        }

        #endregion
    }
}
